package com.abocode.aichat.server.modules.protocol;

import com.abocode.aichat.server.channel.ChannelWrapper;
import com.abocode.aichat.server.entity.Entity;
import com.abocode.aichat.server.entity.EntityImpl;
import com.abocode.aichat.server.modules.AbstractModule;
import com.abocode.aichat.server.modules.ModuleHandler;
import com.abocode.aichat.server.reply.Replies;
import com.abocode.aichat.server.stanza.Stanza;
import com.abocode.aichat.server.stanza.StanzaWrapper;
import com.abocode.aichat.server.modules.AbstractModule;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by franky-19.
 */
public class PresenceModule extends AbstractModule {
    @Override
    public String version() {
        return "1.0";
    }

    @Override
    public String namespace() {
        return "presence";
    }

//
//    class PresenceModuleHandler implements ModuleHandler {
//        @Override
//        public Replies execute(ChannelWrapper channelWrapper, Stanza stanza) {
//            if ("online".equals(stanza.module())) {
//                return online(channelWrapper, stanza);
//            } else if ("roster".equals(stanza.module())) {
//                return roster(channelWrapper, stanza);
//            } else if ("set".equals(stanza.module())) {
//                return set(channelWrapper, stanza);
//            } else if ("get".equals(stanza.module())) {
//                return get(channelWrapper, stanza);
//            } else {
//                throw new RuntimeException("no found " + stanza.module());
//            }
//        }
//
//        public Replies set(ChannelWrapper channelWrapper, Stanza stanza) {
//            Map body = stanza.body();
//            String presence = String.valueOf(body.get("presence"));
//            String jid = String.valueOf(body.get("jid"));
//            Entity entity = EntityImpl.parse(jid);
//            entity.setPresence(presence);
//            getServerRuntimeContext().getProtocolChannelRegistry().presence(entity);
//            Replies replies = new Replies();
//            replies.addReply(channelWrapper.getChannel(), StanzaWrapper.wrapperSuccess(stanza));
//            return replies;
//        }
//
//        public Replies online(ChannelWrapper channelWrapper, Stanza stanza) {
//            getServerRuntimeContext().getProtocolChannelRegistry().presence(channelWrapper.getEntity());
//            return null;
//        }
//
//        public Replies get(ChannelWrapper channelWrapper, Stanza stanza) {
//            Map body = stanza.body();
//            String jid = String.valueOf(body.get("jid"));
//            Entity entity = EntityImpl.parse(jid);
//            boolean flag = getServerRuntimeContext().getProtocolChannelRegistry().isOnline(entity);
//            Replies replies = null;
//            if (flag) {
//                replies = new Replies();
//                Map map = new HashMap();
//                map.put("presence", entity.getPresence());
//                map.put("jid", entity.getFullName());
//                replies.addReply(channelWrapper.getChannel(), StanzaWrapper.wrapper(stanza, map));
//            }
//            return replies;
//        }
//
//        public Replies roster(ChannelWrapper channelWrapper, Stanza stanza) {
//            return null;
//        }
//    }
//
//    private PresenceModuleHandler presenceModuleHandler = new PresenceModuleHandler();
//
//    @Override
//    public ModuleHandler moduleHandler() {
//        return presenceModuleHandler;
//    }
//
//    static class OnlineEntity {
//        private String jid;
//
//        private String show;
//
//        OnlineEntity(String jid, String show) {
//            this.jid = jid;
//            this.show = show;
//        }
//
//        public String getJid() {
//            return jid;
//        }
//
//        public void setJid(String jid) {
//            this.jid = jid;
//        }
//
//        public static List<OnlineEntity> entities(List<Entity> entities) {
//            List list = new ArrayList();
//            for (Entity entity : entities) {
//                list.add(new OnlineEntity(entity.getFullName(), entity.getPresence()));
//            }
//            return list;
//        }
//    }

}
